package com.dm.yyxr.controller;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.dm.yyxr.pojo.User;
import com.dm.yyxr.pojo.dto.UserDto;
import com.dm.yyxr.service.UserService;
import com.dm.yyxr.utils.JwtUtil;
import com.dm.yyxr.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@RequestMapping("/user")
@RestController
@CrossOrigin
public class UserController {
    @Autowired
    UserService userService;

    @PostMapping("/login")
    public Result<Object> login(@RequestBody User user){
        User one;
        //如果用户不为空且用户名不为空
        if(user!=null && StringUtils.isNotBlank(user.getUser_name())){
            //调用getByUserName获取数据库中的匹配该用户名的User对象并赋值给one
            one  = userService.getByUserName(user.getUser_name());
        }else {
            return Result.fail().message("用户名为空");
        }
        //如果one不为空即数据库中有对应的用户名的用户且前端传入的密码和该用户的密码相符
        if(one!=null && one.getUser_passwd().equals(user.getUser_passwd())){
            //创建一个map对象
            Map<String,Object> map = new HashMap<>();
            //将one放入map
            map.put("token", UUID.randomUUID());//生成一个UUID并放入map
            map.put("user",one);
            //将map作为成功结果对象Result的数据返回
            return Result.ok(map);
        }else{
            return Result.fail().message("用户名或密码错误");
        }
    }

    /**
     * 用户注册
     * @param user
     * @return
     */
    @PostMapping("/register")
    public Result<Object> register(@RequestBody User user){
        //调用userService.save将前端传来的user信息保存到数据库中
        userService.save(user);
        //创建一个map存储
        Map<String,String> map = new HashMap<>();
        //调用JwtUtil的getToken方法生成一个令牌token并放入map中返回
        String token = JwtUtil.getToken();
        map.put("token",token);
        return Result.ok(map);
    }

    /**
     * 根据用户ID查询用户信息
     * @param id
     * @return
     */
    @GetMapping("/userInfo/{id}")
    public Result<Object> userInfo(@PathVariable("id") Integer id){
        //调用getUserDtoById根据传来的id从数据库中查询UserDto对象赋值给userDto
        UserDto userDto =userService.getUserDtoById(id);
        //如果userDto为空说明该用户不存在，返回错误信息
        if(userDto==null){
            return Result.fail().message("用户不存在");
        }else{
            //用户存在，返回userDto
            return Result.ok(userDto);
        }
    }
}
